///**
// * 
// */
//package algorithm;
//
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//
//import javax.swing.JOptionPane;
//
//import comparators.AppointmentComperatorTime;
//import comparators.DateComparator;
//
//import entities.Appointment;
//import fachlogik.Administration;
//
///**
// * @author Veit
// * 
// *
//public class VeitsTool implements ToolInterface {
//
//private Administration admin;
//
//private Date           anfang;
//private Date           ende;
//
//
//public VeitsTool() {
//    this.admin = Administration.getInstance();
//
//    // TODO Auto-generated constructor stub
//}
//
///*
// * (non-Javadoc)
// * @see algorithm.ToolInterface#listToReschedule(java.util.List)
//*/
//@Override
//public void listToReschedule(List<Appointment> liste) {
//    // TODO Auto-generated method stub
//}
//
//public void rescheduleAppointment(Date von, Date bis, Appointment appointmentToReschedule) {
//    Appointment app = appointmentToReschedule;
//
//    Date gap = findGap(app);
//    if (gap != null)
//    {
//        long dauer = app.getLength();
//        app.setBegin(gap);
//        app.setEnd(new Date(gap.getTime() + dauer));
//        SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm");
//        JOptionPane
//                .showMessageDialog(null, "Beginn: " + app.getBegin() + ", Ende: " + app.getEnd());
//        return;
//    }
//    JOptionPane.showMessageDialog(null, "Diese Appointment konnte nicht gerescheduled werden");
//}
//
///*
// * (non-Javadoc)
// * @see algorithm.ToolInterface#findGap(entities.Appointment)
// */
//@SuppressWarnings("deprecation")
//@Override
//public Date findGap(Appointment uebergeben) {
//
//    Appointment a = new Appointment();
//    a.setBegin(uebergeben.getBegin());
//    a.setEnd(uebergeben.getEnd());
//    /*
//     * Anfangs und Enddatum der Rescheduling Parameter
//     */
//
//    SimpleDateFormat sf = new SimpleDateFormat("ddMMyyyy");
//    sf.setLenient(false);
//    String tagAnfangTag;
//    String tagAnfangMonat;
//    String tagAnfangJahr;
//    String tagEndeTag;
//    String tagEndeMonat;
//    String tagEndeJahr;
//    try {
//        if (Integer.toString(admin.getRescheduleErlaubtVon().getDate()).length() == 2)
//            tagAnfangTag = Integer.toString(admin.getRescheduleErlaubtVon().getDate());
//        else
//            tagAnfangTag = "0" + Integer.toString(admin.getRescheduleErlaubtVon().getDate());
//
//        if (Integer.toString(admin.getRescheduleErlaubtVon().getMonth()).length() == 2)
//            tagAnfangMonat = Integer.toString(admin.getRescheduleErlaubtVon().getMonth() + 1);
//        else
//            tagAnfangMonat = "0" + Integer.toString(admin.getRescheduleErlaubtVon().getMonth() + 1);
//
//        tagAnfangJahr = Integer.toString(admin.getRescheduleErlaubtVon().getYear() + 1900);
//
//        String tagAnfang = tagAnfangTag + tagAnfangMonat + tagAnfangJahr;
//        System.out.println(tagAnfang);
//        anfang = sf.parse(tagAnfang);
//
//        if (Integer.toString(admin.getRescheduleErlaubtBis().getDate()).length() == 2)
//            tagEndeTag = Integer.toString(admin.getRescheduleErlaubtBis().getDate());
//        else
//            tagEndeTag = "0" + Integer.toString(admin.getRescheduleErlaubtBis().getDate());
//
//        if (Integer.toString(admin.getRescheduleErlaubtVon().getMonth()).length() == 2)
//            tagEndeMonat = Integer.toString(admin.getRescheduleErlaubtBis().getMonth() + 1);
//        else
//            tagEndeMonat = "0" + Integer.toString(admin.getRescheduleErlaubtBis().getMonth() + 1);
//
//        tagEndeJahr = Integer.toString(admin.getRescheduleErlaubtVon().getYear() + 1900);
//
//        String tagEnde = tagEndeTag + tagEndeMonat + tagEndeJahr;
//        System.out.println(tagEnde);
//        ende = sf.parse(tagEnde);
//        /*
//         * anfang und ende sind 00:00 des erlaubten Zeitraums
//         */
//        
//    } catch (ParseException e1) {
//        // TODO Auto-generated catch block
//        e1.printStackTrace();
//    }
//
//    /*
//     * Liste von Appointments innerhalb derer es erlaubt ist
//     */
//
//    String appAnfangHours;
//    String appAnfangMinutes;
//
//    String appEndeHours;
//    String appEndeMinutes;
//
//    if (Integer.toString(uebergeben.getCategory().getAnfangszeit().getHours()).length() == 2)
//        appAnfangHours = Integer.toString(admin.getRescheduleErlaubtVon().getHours());
//    else
//        appAnfangHours = "0" + Integer.toString(admin.getRescheduleErlaubtVon().getHours());
//
//    if (Integer.toString(uebergeben.getCategory().getAnfangszeit().getHours()).length() == 2)
//        appAnfangMinutes = Integer.toString(admin.getRescheduleErlaubtVon().getMinutes());
//    else
//        appAnfangMinutes = "0" + Integer.toString(admin.getRescheduleErlaubtVon().getMinutes());
//
//    if (Integer.toString(uebergeben.getCategory().getEndzeit().getHours()).length() == 2)
//        appEndeHours = Integer.toString(admin.getRescheduleErlaubtVon().getHours());
//    else
//        appEndeHours = "0" + Integer.toString(admin.getRescheduleErlaubtVon().getHours());
//
//    if (Integer.toString(uebergeben.getCategory().getEndzeit().getHours()).length() == 2)
//        appEndeMinutes = Integer.toString(admin.getRescheduleErlaubtVon().getMinutes());
//    else
//        appEndeMinutes = "0" + Integer.toString(admin.getRescheduleErlaubtVon().getMinutes());
//
//    ArrayList<Appointment> erlaubteTage = new ArrayList<Appointment>();
//    SimpleDateFormat sfcat = new SimpleDateFormat("ddMMyyyyhhmm");
//    SimpleDateFormat sfhm = new SimpleDateFormat("hhmm");
//    long bleibendeZeit = ende.getTime() - anfang.getTime();
//    long long24hTag = 24 * 60 * 60 * 1000;
//    bleibendeZeit += long24hTag;
//    int index = 0;
//    try {
//        do {
//            Appointment catTag = new Appointment();
//            Date bearbeiteterTag = new Date(anfang.getTime() + index * long24hTag);
//            catTag.setBegin(new Date(bearbeiteterTag.getTime()
//                    + sfhm.parse(appAnfangHours + appAnfangMinutes).getTime()));
//            catTag.setEnd(new Date(bearbeiteterTag.getTime()
//                    + sfhm.parse(appEndeHours + appEndeMinutes).getTime()));
//            erlaubteTage.add(catTag);
//            bleibendeZeit -= long24hTag;
//            index++;
//        } while (bleibendeZeit != 0);
//    } catch (ParseException e) {
//        // TODO Auto-generated catch block
//        e.printStackTrace();
//    }
//
//    /*
//     * Liste von Appointments ALLER appointments
//     */
//
//    List<Appointment> calendarListe = admin.rescheduleBetweenTimespan(admin
//            .getRescheduleErlaubtBis(), admin.getRescheduleErlaubtBis(), uebergeben.getCalendar());
//    if (calendarListe.contains(uebergeben)) {
//        calendarListe.remove(uebergeben);
//    }
//    admin.appointmentsSortieren(calendarListe);
//
//    /*
//     * rescheduling
//     */
//    AppointmentComperatorTime ueberlappenTest = new AppointmentComperatorTime();
//    int ueberlappt = 0;
//    long laenge = a.getLength();
//
//    for (Appointment catApp : calendarListe) {
//        a.setBegin(catApp.getBegin());
//        a.setEnd(new Date(a.getBegin().getTime() + laenge));
//        for (int i = 0; i < calendarListe.size(); i++) {
//            Appointment app = calendarListe.get(i);
//            if (ueberlappenTest.compare(a, app) == 1 || ueberlappenTest.compare(a, app) == -1) {
//                if (appointmentAWithinAppointmentB(a, catApp)) {
//                    return a.getBegin();
//                }
//            }
//            if (ueberlappenTest.compare(a, app) == 0) {
//                a.setBegin(app.getEnd());
//                a.setEnd(new Date(a.getBegin().getTime() + laenge));
//            }
//        }
//    }
//    return new Date(0);
//}
//
//@SuppressWarnings("deprecation")
//public boolean appointmentAWithinAppointmentB(Appointment a, Appointment b)
//{
//    if ((a.getBegin().getHours() > b.getBegin().getHours() || (a.getBegin().getHours() == b
//            .getBegin().getHours() && a.getBegin()
//            .getMinutes() >= b.getBegin().getMinutes()))
//            && (a.getEnd().getHours() < b.getEnd().getHours() || (a.getEnd().getHours() == b
//                    .getEnd().getHours() && a.getEnd().getMinutes() <= b.getEnd().getMinutes())))
//        return true;
//    else
//        return false;
//}
//}
//**/
